home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
util1
/
yk211src.lha
/
Yak_2.11_Src
/
Prefs
/
GadTools
/
Root_window.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-16
|
21KB
|
654 lines
/*
* Source machine generated by GadToolsBox V2.0b
* which is (c) Copyright 1991-1993 Jaba Development
*
* GUI Designed by : Gaël Marziou & Ph. Bastiani
*/
#define __USE_SYSBASE
#include <exec/memory.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <libraries/asl.h>
#include <workbench/workbench.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/icon.h>
#include <proto/wb.h>
#include <proto/asl.h>
#include <string.h>
#include <stdlib.h>
#include "code.h"
#include "version.h"
#include "yak.h"
#include "hotkey_types.h"
#include "gui.h"
#include "filereq.h"
#include "Requesters.h"
#include "Settings.h"
#include "Root_Window.h"
#include "Root_Menus.h"
#define CATCOMP_NUMBERS
#include "locale/yak_locale_strings.h"
IMPORT LONG (*HandleIDCMP)(void);
IMPORT BOOL CreateIcons;
IMPORT char *ProgramName;
IMPORT char *PrefsFile;
IMPORT struct NotifyRequest NotifyRequest;
struct Window *RootWnd = NULL;
struct Gadget *RootGList = NULL;
struct Menu *RootMenus = NULL;
struct Gadget *RootGadgets[Root_CNT];
UWORD RootWidth = 600;
UWORD RootHeight = 156;
UBYTE *RootWdt = NULL;
BOOL RootWdi = FALSE;
struct AppWindow *RootAppWin; /* AppWindow pointer */
IMPORT struct MsgPort *AppMsgPort;
/* Online help system */
IMPORT void ShowYakHelp(char *, char *);
IMPORT void CloseYakHelp(void);
IMPORT char *PrefsHelp;
#define ROOT_TNUM 3
struct IntuiText RootIText[ROOT_TNUM] =
{
2,0,JAM1,0,0,NULL,NULL,NULL,
2,0,JAM1,0,0,NULL,NULL,NULL,
2,0,JAM1,0,0,NULL,NULL,NULL
};
VOID
InitRootITexts(VOID)
{
RootIText[0].IText = getString(WINDOWS_ACTIVATE_STRING);
RootIText[1].IText = getString(AUTOPOPTOFRONT_STRING);
RootIText[2].IText = getString(SCREEN_ACTIVATE_STRING);
}
UWORD RootGTypes[] = {
CHECKBOX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
CHECKBOX_KIND,
STRING_KIND,
STRING_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
BUTTON_KIND,
SLIDER_KIND
};
struct NewGadget RootNGad[] =
{
226, 15, 26,11,NULL,NULL,GD_AutoCheck ,PLACETEXT_RIGHT,NULL,AUTOPOINT_STRING,
6, 15, 26,11,NULL,NULL,GD_KeyActCheck ,PLACETEXT_RIGHT,NULL,KEY_ACTIVATE_STRING,
6, 72, 26,11,NULL,NULL,GD_ScrActCheck ,PLACETEXT_RIGHT,NULL,SCREEN_ACTIVATE_STRING,
226, 72, 26,11,NULL,NULL,GD_AutoPopCheck ,PLACETEXT_RIGHT,NULL,AUTOPOPTOFRONT_STRING,
6, 39, 26,11,NULL,NULL,GD_RMBActCheck ,PLACETEXT_RIGHT,NULL,RMB_ACTIVATE_STRING,
6, 27, 26,11,NULL,NULL,GD_MMBActCheck ,PLACETEXT_RIGHT,NULL,MMB_ACTIVATE_STRING,
430, 27,164,14,NULL,NULL,GD_AutoPat ,PLACETEXT_LEFT ,NULL,AUTOSCREENS_STRING,
430, 84,164,14,NULL,NULL,GD_PopPat ,PLACETEXT_LEFT ,NULL,POPWINDOWS_STRING,
226,122,182,13,NULL,NULL,GD_EditHotkeys ,PLACETEXT_IN ,NULL,EDIT_HOTKEYS_STRING,
412,122,182,13,NULL,NULL,GD_Miscellaneous ,PLACETEXT_IN ,NULL,MISCELLANEOUS_STRING,
412,106,182,13,NULL,NULL,GD_Blanking ,PLACETEXT_IN ,NULL,Blanking,
6,140,100,13,NULL,NULL,GD_Save ,PLACETEXT_IN ,NULL,SAVE_STRING,
494,140,100,13,NULL,NULL,GD_Cancel0 ,PLACETEXT_IN ,NULL,CANCEL_STRING,
250,140,100,13,NULL,NULL,GD_Use ,PLACETEXT_IN ,NULL,USE_STRING,
226,106,182,13,NULL,NULL,GD_MouseCycling ,PLACETEXT_IN ,NULL,MOUSECYCLING_STRING,
430, 43,147,11,NULL,NULL,GD_AutoPointDelay,PLACETEXT_LEFT ,NULL,AUTOPOINT_DELAY_STRING
};
ULONG RootGTags[] =
{
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTCB_Scaled),TRUE,(TAG_DONE),
(GTST_MaxChars),99,(TAG_DONE),
(GTST_MaxChars),99,(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(TAG_DONE),
(GTSL_Max),5,(GTSL_MaxLevelLen),4,(GTSL_LevelFormat),(ULONG)"%1ld",(GTSL_LevelPlace),(PLACETEXT_RIGHT),(PGA_Freedom), LORIENT_HORIZ,(GA_RelVerify),TRUE,(TAG_DONE),
};
/* initialise gadgets */
static void
InitAutoPointGadgets( void )
{
InitWindowGadget(GDX_AutoPat, GTST_String, (LONG)patterns[YP_AUTOSCR_PAT].patstr, ROOT_WINDOW);
InitWindowGadget(GDX_AutoPat, GA_Disabled, !autopoint, ROOT_WINDOW);
InitWindowGadget(GDX_AutoPointDelay, GTSL_Level, autopoint_delay, ROOT_WINDOW);
InitWindowGadget(GDX_AutoPointDelay, GA_Disabled, !autopoint, ROOT_WINDOW);
}
static void
InitAutoPopGadgets( void)
{
InitWindowGadget(GDX_PopPat, GTST_String, (LONG)patterns[YP_POPWIN_PAT].patstr, ROOT_WINDOW);
InitWindowGadget(GDX_PopPat, GA_Disabled, !autopop, ROOT_WINDOW);
}
static void
InitRootGadgets(void)
{
InitToggleGadgets(ROOT_WINDOW);
InitAutoPopGadgets();
InitAutoPointGadgets();
}
VOID
RootRender(void)
{
UWORD X,Y;
UWORD width, height;
UWORD cnt;
ComputeFont(RootWidth,RootHeight);
/* Window activation */
X = Y = 0;
height= ComputeY(57);
DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
ComputeX( RootWidth ),
height,
FALSE);
RootIText[ 0 ].LeftEdge = X +5;
RootIText[ 0 ].TopEdge = Y +3;
/* Screens Activation */
width = ComputeX(220);
Y += height;
height = ComputeY(138) - Y;
DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
width,
height,
FALSE);
RootIText[ 2 ].LeftEdge = X +5;
RootIText[ 2 ].TopEdge = Y +3;
/* AutoPopToFront box */
X = width;
width = ComputeX(RootWidth)-width;
height = ComputeY(103) - Y;
DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
width,
height,
FALSE);
RootIText[ 1 ].LeftEdge = X +5;
RootIText[ 1 ].TopEdge = Y +3;
/* Buttons */
Y += height;
height = ComputeY(138) - Y;
DrawThinBevelBox(Scr, RootWnd->RPort,X+OffX, Y+OffY,
width,
height,
FALSE);
/* SAVE / USE / CANCEL */
Y += height;
DrawThinBevelBox(Scr, RootWnd->RPort, OffX, Y+OffY,
ComputeX( RootWidth ),
ComputeY(RootHeight)-ComputeY(138),
FALSE );
/* Text */
for ( cnt = 0; cnt < ROOT_TNUM; cnt++ )
{
RootIText[ cnt ].ITextFont = Font;
PrintIText( RootWnd->RPort, &RootIText[ cnt ], OffX, OffY );
}
}
int
OpenRootWindow(void)
{
struct NewGadget ng;
struct Gadget *g;
UWORD lc, tc;
WORD wleft=WindowLeft, wtop=WindowTop;
UWORD ww, wh;
ComputeFont(RootWidth,RootHeight);
ww = OffX + ComputeX(RootWidth) + Scr->WBorRight;
wh = OffY + ComputeY(RootHeight) + Scr->WBorBottom;
SetUpWindowCoordinates(ww, wh, &wleft, &wtop);
if (! (g = CreateContext(&RootGList)))
return(1L);
for(lc = 0,tc = 0; lc < Root_CNT; lc++) {
CopyMem((char *)&RootNGad[ lc ],(char *)&ng,(long)sizeof(struct NewGadget));
ng.ng_VisualInfo = VisualInfo;
ng.ng_TextAttr = Font;
ng.ng_LeftEdge = OffX + ComputeX(ng.ng_LeftEdge);
ng.ng_TopEdge = OffY + ComputeY(ng.ng_TopEdge);
ng.ng_Width = ComputeX(ng.ng_Width);
ng.ng_Height = ComputeY(ng.ng_Height);
RootGadgets[ lc ] = g = CreateGadgetA((ULONG)RootGTypes[ lc ],g,&ng,(struct TagItem *)&RootGTags[ tc ]);
while(RootGTags[ tc ]) tc += 2;
tc++;
if (NOT g)
return(2L);
}
/**** CHANGED */
if (! (RootMenus = CreateMenus(RootNewMenu,GTMN_NewLookMenus,
TRUE,0L,
TAG_DONE)))
return(3L);
LayoutMenus(RootMenus,VisualInfo,GTMN_NewLookMenus,TRUE,TAG_DONE);
if (! (RootWnd = OpenWindowTags(NULL,
WA_Left, wleft,
WA_Top, wtop,
WA_Width, ww,
WA_Height, wh,
WA_IDCMP, BUTTONIDCMP|CHECKBOXIDCMP|STRINGIDCMP|SLIDERIDCMP|IDCMP_MENUPICK|IDCMP_REFRESHWINDOW|IDCMP_RAWKEY,
WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
WA_Gadgets, RootGList,
WA_Title, RootWdt,
WA_ScreenTitle, getString(COPYRIGHT_STRING),
WA_AutoAdjust, TRUE,
/**** ADDED */ WA_NewLookMenus, TRUE,
WA_PubScreenName, PubScreenName,
TAG_DONE)))
return(4L);
RootAppWin = AddAppWindowA(0, 0, RootWnd, AppMsgPort, NULL);
SetMenuStrip(RootWnd,RootMenus);
GT_RefreshWindow(RootWnd,NULL);
RootRender();
return(0L);
}
VOID
CloseRootWindow(void)
{
CloseOneWindow(RootWnd,RootMenus,RootGList,RootAppWin);
RootWnd = NULL;
}
/* show our Root window */
BOOL
ShowRootWindow(void)
{
static char title[80];
if (!RootWdi)
{
RootWdi = TRUE;
strcpy(title, getString(Prefs_Window_TITLE));
strcat(title, " : ");
strcat(title,VERSION_NAME);
RootWdt = title;
InitRootNewMenu ();
InitRootITexts();
LocalizeNGadLabels (Root_CNT, RootNGad);
}
if (!OpenRootWindow()) /* like the name says... */
{
InitRootGadgets();
wndsigflag = 1 << RootWnd->UserPort->mp_SigBit;
HandleIDCMP = HandleRootIDCMP;
curwin = RootWnd;
curwinID = ROOT_WINDOW;
return TRUE;
}
FreeGadgets(RootGList);
FreeMenus(RootMenus);
CloseDownScreen();
curwin = NULL;
wndsigflag = 0L;
return FALSE;
}
/* handle Root window events */
LONG
HandleRootIDCMP(void)
{
struct IntuiMessage *msg;
struct Gadget *gadget;
ULONG class;
UWORD code;
char *file;
FileReqParams frp;
BOOL close=FALSE;
LONG ret=RET_OKAY;
while (!close && (msg=GT_GetIMsg(RootWnd->UserPort)))
{
class = msg->Class;
code = msg->Code;
gadget = (struct Gadget *)msg->IAddress;
GT_ReplyIMsg(msg);
switch (class)
{
case GADGETUP:
case GADGETDOWN:
switch (gadget->GadgetID)
{
case GD_EditHotkeys:
if (!SwitchFromRootWindow(HOTKEY_WINDOW))
{
PostError(getString(Couldnt_open_other_window_ERR));
ret = RET_QUIT;
}
close = TRUE;
break;
case GD_Miscellaneous:
if (!SwitchFromRootWindow(MISC_WINDOW))
{
PostError(getString(Couldnt_open_other_window_ERR));
ret = RET_QUIT;
}
close = TRUE;
break;
break;
case GD_Blanking:
if (!SwitchFromRootWindow(BLANK_WINDOW))
{
PostError(getString(Couldnt_open_other_window_ERR));
ret = RET_QUIT;
}
close = TRUE;
break;
case GD_MouseCycling:
if (!SwitchFromRootWindow(MCYCLING_WINDOW))
{
PostError(getString(Couldnt_open_other_window_ERR));
ret = RET_QUIT;
}
close = TRUE;
break;
case GD_AutoPat:
NewPattern(GDX_AutoPat, &patterns[YP_AUTOSCR_PAT], gadget, ROOT_WINDOW);
break;
case GD_PopPat:
NewPattern(GDX_PopPat, &patterns[YP_POPWIN_PAT], gadget, ROOT_WINDOW);
break;
case GD_Save:
DisableYakInterface();
EndNotify(&NotifyRequest);
SaveSettings(ENVARC_CONFIG_FILE);
CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
StartNotify(&NotifyRequest);
EnableYakInterface();
close = TRUE;
ret = RET_QUIT;
break;
case GD_Use:
DisableYakInterface();
EndNotify(&NotifyRequest);
SaveSettings(ENV_CONFIG_FILE);
StartNotify(&NotifyRequest);
close = TRUE;
ret = RET_QUIT;
break;
case GD_Cancel0:
close = TRUE;
ret = RET_QUIT;
break;
case GD_AutoCheck: /* toggle */
autopoint ^= TRUE;
InitAutoPointGadgets();
break;
case GD_AutoPopCheck: /* toggle */
autopop ^= TRUE;
InitAutoPopGadgets();
break;
case GD_KeyActCheck: /* toggle */
keyactivate ^= TRUE;
break;
case GD_ScrActCheck: /* toggle */
scractivate ^= TRUE;
break;
case GD_RMBActCheck: /* toggle */
rmbactivate ^= TRUE;
break;
case GD_MMBActCheck: /* toggle */
mmbactivate ^= TRUE;
break;
case GD_AutoPointDelay:
autopoint_delay = code;
break;
} /* switch (gadget->GadgetID) */
break;
case IDCMP_MENUPICK:
while (!close && (code != MENUNULL))
{
struct MenuItem *item = ItemAddress(RootMenus, code);
switch((UBYTE)GTMENUITEM_USERDATA(item))
{
case MD_OPEN:
frp.frp_Window = curwin;
frp.frp_Title = getString(FILEREQ_LOAD_STRING);
frp.frp_InitialFile = PrefsFile;
frp.frp_Flag1 = 0L;
DisableYakInterface();
if (file=OpenFileRequester(&frp))
{
LoadSettings(file);
FreeVec(PrefsFile);
PrefsFile = file;
InitRootGadgets();
}
EnableYakInterface();
break;
case MD_SAVE:
DisableYakInterface();
EndNotify(&NotifyRequest);
SaveSettings(ENVARC_CONFIG_FILE);
CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
StartNotify(&NotifyRequest);
EnableYakInterface();
break;
case MD_SAVEAS:
frp.frp_Window = curwin;
frp.frp_Title = getString(FILEREQ_SAVEAS_STRING);
frp.frp_InitialFile = PrefsFile;
frp.frp_Flag1 = FRF_DOSAVEMODE;
DisableYakInterface();
EndNotify(&NotifyRequest);
if (file=OpenFileRequester(&frp))
{
SaveSettings(file);
if (CreateIcons)
{
struct DiskObject *dobj;
/* Get project icon */
if (!(dobj=GetDiskObject("ENV:Sys/def_yak")))
dobj = GetDefDiskObject(WBPROJECT);
if (dobj)
{
/* Set values */
dobj->do_DefaultTool = ProgramName;
dobj->do_Type = WBPROJECT;
/* Write icon */
PutDiskObject(file, dobj);
/* Free icon */
FreeDiskObject(dobj);
}
}
FreeVec(PrefsFile);
PrefsFile = file;
}
StartNotify(&NotifyRequest);
EnableYakInterface();
break;
case MD_HIDE:
CloseYakHelp();
HideInterface();
close = TRUE;
break;
case MD_ABOUT:
DisableYakInterface();
PostError(getString(About_Yak_STRING));
EnableYakInterface();
break;
case MD_QUIT:
close = TRUE;
ret = RET_QUIT;
break;
case MD_DEFAULT:
DisableYakInterface();
SetDefaultSettings();
InitRootGadgets();
EnableYakInterface();
break;
case MD_LASTSAVED:
DisableYakInterface();
LoadSettings(ENVARC_CONFIG_FILE);
InitRootGadgets();
EnableYakInterface();
break;
case MD_ACTIVE:
DisableYakInterface();
LoadSettings(ENV_CONFIG_FILE);
InitRootGadgets();
EnableYakInterface();
break;
case MD_CREATEICONS:
CreateIcons ^= TRUE;
break;
}
code = item->NextSelect;
} /* while more menuchoices */
break;
case IDCMP_RAWKEY:
/* Help key pressed */
if (code == 95)
{
/* Display the node */
ShowYakHelp(PrefsHelp, "MainWindow");
}
break;
case REFRESHWINDOW:
GT_BeginRefresh(RootWnd);
RootRender();
GT_EndRefresh(RootWnd, TRUE);
break;
} /* switch (class) */
} /* while more messages */
return ret;
}
/* switch from Root window to a sub-window */
BOOL
SwitchFromRootWindow(UBYTE WindowID)
{
CloseRootWindow();
return ShowWindowID(WindowID);
}